package com.k12.file.controller.demo;

import com.k12.file.utils.ExcelUtil;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * @Description: 导出demo
 */
@RestController
public class FileDemoController {


    @GetMapping("/bigData")
    public void exportBigData(HttpServletResponse response) throws IOException {
        long l = System.currentTimeMillis();
        // 使用分批次导出
        ExcelUtil.export(response, "百万用户数据", "用户数据", User.class,
                (page, pageSize) -> {
                    // 这里应该是从数据库分页查询数据
                    // 模拟实现：返回指定范围的数据
                    int total = 1000000; // 100万条数据
                    int start = (page - 1) * pageSize;
                    if (start >= total) {
                        return Collections.emptyList();
                    }
                    int end = Math.min(start + pageSize, total);
                    System.out.println("end----------"+end);
                    return generateUsers(end - start);
                });
        long l1 = System.currentTimeMillis();
        System.out.println("耗时：" + (l1 - l));
    }

    // 生成测试数据的方法
    private List<User> generateUsers(int count) {
        List<User> users = new ArrayList<>();
        for (int i = 1; i <= count; i++) {
            User user = new User();
            user.setId(i);
            user.setName("用户" + i);
            user.setAge(20 + i % 30);
            user.setEmail("user" + i + "@example.com");
            users.add(user);
        }
        return users;
    }



    @PostMapping("/upload")
    public String upload(@RequestParam("file") MultipartFile file) {
        try {
            // 1. 获取文件输入流
            InputStream inputStream = file.getInputStream();

            // 2. 准备一个列表来存储导入的数据（实际项目中应该直接处理或保存到数据库）
            List<User> importedUsers = new ArrayList<>();

            // 3. 调用导入工具
            ExcelUtil.importExcel(inputStream, User.class, importedUsers::add);

            // 4. 返回导入结果
            return "导入成功，共导入 " + importedUsers.size() + " 条数据";
        } catch (Exception e) {
            return "导入失败: " + e.getMessage();
        }
    }
}
